﻿#pragma once
#include "zyBase.h"

namespace BlackMoonUI {

	class zyLayout : public  zyBase
	{
	public:
		struct zyLayoutItem {
			zyObject* pObject;
			线性布局对齐 align; //看自己小键盘，0表示铺满
			RECT* pItemRect;
			RECT* pRect;
			RECT* pMargin;
			int minWidth;
			int minHeight;
		};
	public:
		zyLayout();
		~zyLayout();
		void 布局()const;
		int 添加项目(zyBase& 参数_控件, 线性布局对齐 参数_对齐方式 = 线性布局对齐_错误, RECT* 参数_边距 = nullptr, int 参数_最小宽度 = -1, int 参数_最小高度 = -1);
		int 插入项目(int 参数_索引, zyBase& 参数_控件, 线性布局对齐 参数_对齐方式 = 线性布局对齐_错误, RECT* 参数_边距 = nullptr, int 参数_最小宽度 = -1, int 参数_最小高度 = -1);
		bool 置项目对齐(int 参数_项目索引, 线性布局对齐 参数_布局属性);
		线性布局对齐 取项目对齐(int 参数_项目索引);
		bool 置项目边距(int 参数_项目索引, RECT* 参数_边距);
		RECT* 取项目边距(int 参数_项目索引);
		bool 置项目控件(int 参数_项目索引, zyBase& 参数_控件);
		bool 取项目控件(int 参数_项目索引, zyBase& 参数_控件);
		SIZE 取项目最小尺寸(int 参数_项目索引);
		bool 置项目最小尺寸(int 参数_项目索引, SIZE 参数_最小尺寸);
		SIZE 取最小尺寸();
		void 置最小尺寸(int 参数_最小宽度, int 参数_最小高度);
		void 置尺寸(int 参数_宽度, int 参数_高度);
		RECT* 取矩形();
		RECT* 取项目矩形(int 参数_项目索引);
		int 取坐标项目(int 参数_横向坐标, int 参数_纵向坐标);
	protected:
		static void  WINAPI zyLayout_Destroy(zyObject* obj);
		static LRESULT  WINAPI zyLayout_WndProc(zyObject* obj, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL* bHandled);
		RECT zyGetAlignRectI(RECT srcRect, int align, int Width, int Height, int marginLeft, int marginTop, int marginRight, int marginBottom);
	private:
		RECT* zyLayout_SetSize(zyObject* obj, int &cx,int &cy);
		void init();
		
	};

}

